
#include "value.h"

Value::Value(Store* s, const std::string& k)
:store_(s),key_(k) {
	//assert s in null
}

bool Value::Has() const {
	return store_->Has(key_);
}

template <>
bool Value::Get(std::string& v) const {
	return store_->Get(key_, v);
}

template <>
bool Value::Set(const std::string& v) {
	return store_->Set(key_, v);
}

template <>
bool Value::Get(int& v) const {
	std::string raw;
	if(!Get(raw))
		return false;
	//base string2int
	v = atoi(raw.c_str());
	return true;
}

template <>
bool Value::Set(const int& v) {
	std::string raw;
	//base int2string
	return Set(raw);
}

template <>
bool Value::Get(bool& v) const {
	int value;
	if (!Get(value))
		return false;
	v = value != 0;
	return true;
}

template <>
bool Value::Set(const bool& v) {
	return Set( v ? 1 : 0);
}